package com.lplb.common.core.utils;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;

/**
 * 获取比例配置工具类，根据入参判断大小，并获取对应配置信息 judges （判断数值:如等级）|  scales（获取值: 如: 升级奖励的金币数量）
 *
 * @author 王松
 * @mail 1720696548@qq.com
 * @date 2020/7/13 0013 11:25
 */
public class RatioConfigUtil {


    /**
     * 根据入参获取对应配置信息
     * <p/>
     *
     * @param configKeys 判断值列表 (竖线分隔，如：0 |1  |2  |3  |4  |5)，必需从小到大
     * @param configVals 获取值列表 (竖线分隔  如：1 |0.9|0.8|0.7|0.6|0.5)
     * @param configKey  判断值，按判断值索引从小到到，开始判断，当判断值大于等于当前索引的值，返回对应索引的获取值列表的数据
     * @param defaultVal 默认值, 如果dayNum小于judges的索引0 ，返回设置的 defaultVal 默认值
     *                   <p/>
     *                   示例一：0|1|2|3|4|5   -->  1|0.9|0.8|0.7|0.6|0.5
     *                   <p/>
     *                   configKey = 0, configKey >= 0, 返回索引0的值 1
     *                   configKey = 1, configKey >= 1, 返回索引1的值 0.9
     *                   configKey = 2, configKey >= 2, 返回索引2的值 0.8
     *                   configKey = 3, configKey >= 3, 返回索引3的值 0.7
     *                   configKey = 4, configKey >= 4, 返回索引4的值 0.6
     *                   configKey = 5, configKey >= 5, 返回索引5的值 0.5
     *                   configKey = 6, configKey >= 5, 返回索引5的值 0.5
     *                   configKey = 10, configKey >= 5, 返回索引5的值 0.5
     *                   configKey = 100, configKey >= 5, 返回索引5的值 0.5
     *                   <p>
     *                   示例二： 0|2|4|6|8|10   -->  0|10|30|60|100|150
     *                   <p/>
     *                   configKey = 0, configKey>= 0, 返回索引0的值 0
     *                   configKey = 2, configKey>= 1, 返回索引1的值 10
     *                   configKey = 4, configKey>= 2, 返回索引2的值 30
     *                   configKey = 6, configKey>= 3, 返回索引3的值 60
     *                   configKey = 8, configKey>= 4, 返回索引4的值 100
     *                   configKey = 10,configKey >= 5, 返回索引5的值 150
     *                   configKey = 11,configKey >= 5, 返回索引5的值 150
     *                   configKey = 12,configKey >= 5, 返回索引5的值 150
     *                   configKey = 100, configKey >= 5, 返回索引5的值 150
     *                   <p/>
     *                   <p>
     *                   1、获取到对应判断值列表configKeys[x]对应索引的获取值列表configVals[x](小数)
     *                   2、没有配置信息/或索引长度错误返回 defaultVal
     *                   3、如果configKey小于configKeys的索引0 ，返回设置的 defaultVal 默认值
     * @return Double
     */

    public static Double getConfigVal(String configKeys, String configVals, Integer configKey, Double defaultVal) {
        try {
            if (StringUtils.isBlank(configKeys) || StringUtils.isBlank(configVals)) {
                return defaultVal;
            } else {
                String[] configKeyArray = configKeys.split("\\|");
                String[] configValArray = configVals.split("\\|");
                double configVal = 0;
                for (int i = 0; i < configKeyArray.length; i++) {
                    // 当入参小于索引0的值时,configKeyArray是必需从小到大，因为已经小于索引0了,直接返回默认值defaultVal
                    if (i == 0 && configKey < Double.parseDouble(configKeyArray[i])) {
                        return defaultVal;
                    }
                    if (configKey >= Double.parseDouble(configKeyArray[i])) {
                        configVal = Double.parseDouble(configValArray[i]);
                    }
                }
                return configVal;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


    /**
     *  测试
     *
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(getConfigVal("0|1|2|3|4|5", "1|0.9|0.8|0.7|0.6|0.5", 1, 0.0));
        System.out.println(getConfigVal("0|2|4|6|8|10", "0|10|30|60|100|150", 1, 0.0));
        System.out.println(getConfigVal("1|2|3|5|7", "1|0.9|0.8|0.7|0.5", 7, 1.0));
    }
}
